package util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 在界面初始化时，创建文件信息表
 */
public class DBInit {

    /**
     * 读取sql文件，然后
     * @return
     */
    public static List<String> readSQL(){
        List<String> ret = new ArrayList<>();
        //使用相对路径，将sql资源文件加载到该方法中
        //InputStream in = new FileInputStream("src/main/resources/init.sql");使用这种方式，打成jar后无法找到路径，原因在于target目录中不存在src这个目录
        /*
        src/main下的所有类和资源文件打包后都会放到target目录下的classes文件中，其中资源文件放在target的根目录下
        通过类加载器，从加载后的文件的根目录下就可以找到该资源文件，因为该资源文件在加载后的文件的根目录下
        通过类加载就可以直接解决路径的问题；
         */
        InputStream in = DBInit.class.getClassLoader().getResourceAsStream("init.sql");
        //对于输入流，一律采用scanner来处理，输出流，一律采用PrintStream
        Scanner sc = new Scanner(in);//将类加载进来的sql文件，输入到程序中
        //自定义分隔符,按照；进行拆分
        sc.useDelimiter(";");
        //hasNext()按照分隔符划分，hasNextLine()按照行划分
        while (sc.hasNext()){
            String str = sc.next();
            if(str.contains("-")){
                str.replaceAll("-","");
            }
            if ("".equals(str) || "\r\n".equals(str)){
                continue;
            }
            ret.add(str);
        }
//        System.out.println(ret);
        return ret;
    }

    /**
     * 在界面初始化的时候，创建数据表
     */
    public static void init(){
        Connection connection = null;
        Statement statement = null;
        try {
            connection = DBUtil.getConnection();
            List<String> sqls = readSQL();
            statement = connection.createStatement();
            //获取要执行的sql语句
            for (String sql : sqls) {
                System.out.println("执行sql语句 ："+ sql);
                statement.executeUpdate(sql);
            }
        }catch (SQLException e){
            System.out.println("数据库初始化失败");
            e.printStackTrace();
        }finally {
            DBUtil.close(statement);
        }
    }

    public static void main(String[] args) {
        init();
    }

}
